package dataMining.VertialTopK2;

/**
 * @author: cuiH
 * Date: 13-8-1
 * Function: 提供item的合并，获取最终的item的操作
 * 方式：通过比较，形成大小递增的排序方式
 */
public class GetItem {
    int[] getItem(int[] item_a, int[] item_b) {
        int[] newItem = new int[item_a.length + item_b.length];
//        第一种排序方式，采用将a全部赋值，b继续赋值，没有顺序
//        for(int i = 0;i<item_a.length;i++){
//            newItem[i] = item_a[i];                    //将a全部赋值给新的item上面
//            if(i == item_a.length-1){                 //a 的赋值完成
//                int preLength = i;
//                for(int j = 0;j<item_b.length;j++){
//                    for(int k = 0;k<=preLength;k++){
//                        if(item_b[j]==newItem[k]){    //如果存在相等，直接退回，并且
//                               return newItem;        //直接返回，则长度必然不够
//                        }
//                    }
//                    newItem[++i] = item_b[j];          //添加完成
//                }
//            }
//        }

//        第二种赋值方式 ，形成有序
        int length = 0;
        for (int i = 0, j = 0; i < item_a.length && j < item_b.length; ) {
            if (item_a[i] == item_b[j]) {
                return newItem;                          //这样子返回最后一项必定为空，则可以直接淘汰
            } else if (item_a[i] < item_b[j]) {
                newItem[length] = item_a[i];
                length++;
                i++;
                if (i == item_a.length) {
//                    直接全部赋值b
                    while (j < item_b.length) {
                        newItem[length] = item_b[j];
                        j++;
                        length++;
                    }
                }
            } else {
                newItem[length] = item_b[j];
                length++;
                j++;
                if (j == item_b.length) {
                    while (i < item_a.length) {
                        newItem[length] = item_a[i];
                        length++;
                        i++;
                    }
                }
            }
        }
        return newItem;
    }
}
